#pragma once

#include "TypeDefin.h"
#include "iostream"
#include "vector"
#include "algorithm"

using namespace std;
/*HJJ QQ479287006
 *
 * */
/*

根 + 左 + 右
根 + 左
根 + 右
根
 //为什么没有左 右 有没有一种可能 他遍历的时候 同时把左右也想进去了
 *
 * */
//返回最大的路径和
//


int maxV = INT_MIN;

//这个是求一个路径的最值 ..从跟 到左边或者右边的
int maxPathSum_r(TreeNode *root) {

    if (!root) {
        return -9990;
    }
    //获取左子树最大和
    int left = maxPathSum_r(root->left);
    int right = maxPathSum_r(root->right);

    int max1 = left + root->val;
    int max2 = right + root->val;
    int max3 = root->val;
    int max4 = right + root->val + left;

    int tempMax = max(max(max1, max2), max(max3, max4));

    maxV = max(maxV, tempMax);

    return max(max(max1, max2), max3);


}

int maxPathSum(TreeNode *root) {
    if (root == nullptr)
        return 0;

    maxPathSum_r(root);

    return maxV;

}